<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>03_天气案例_监视属性</title>
     <script src="../js/vue.js"></script>
</head>
<body>
    <!-- 
        深度监视：
            1.Vue中的watch默认不监测对象内部值得变化。
            2.配置deep：true可以监测对象内部值改变（多层）。
        备注：
            Vue对象自身可以监测对象内部值改变，但是Vue提供的默认属性不可以
     -->
    <div id="root">
        <h1>今天天气非常{{info}}</h1>
        <button @click="changeInfo">切换天气</button>
        <hr/>
        <h3>a的值是{{numbers.a}}</h3>
        <button @click="numbers.a++">点击a加1</button>
        <button @click="numbers={a:100,b:20}">点击改变numbers</button>
    </div>
    <script>
        const vm = new Vue({
            el:'#root',
            data:{
                ishot:true,
                numbers:{
                    a:1,
                    b:1
                }
            },
            computed:{
                info(){
                    return this.ishot ? '热' : '冷';
                }
            },
            methods: {
                changeInfo(){
                    this.ishot=!this.ishot;
                }
            },
            watch:{
                ishot:{
                    //handler是么时候调用？当ishot发生改变时。
                    handler(newValue,oldValue){
                        console.log('ishot被修改了',oldValue,newValue)
                    }
                },
                'numbers.a':{
                    handler(){
                        console.log('a被改变了')
                    }
                },
                //监视多级结构中所有属性的变化
                numbers:{
                    deep:true,
                    handler(){
                        console.log('numbers被改变了');
                    }
                }
            }
        });

    
    </script>
</body>
</html>